﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Mjolnir.InfraEstrutura.Servicos;
using Mjolnir.Modelo.Ponteiros;

namespace Mjolnir.Modelo.Linhas
{
  public class ServicoLinha : ServicoBase<Linha, FabricaLinha>, IServicoLinha
  {
    /// <summary>
    /// Criar uma array (createArray).
    /// </summary>
    /// <param name="numero">numero.</param>
    /// <returns></returns>
    public Linha[] criarArray(int numero)
    {
      Linha[] retorno = new Linha[numero];

      for (int i = 0; i < numero; i++)
      {
        retorno[i] = fabrica.criar();
      }

      return retorno;
    }

    /// <summary>
    /// Copiar de (copyFrom).
    /// </summary>
    /// <param name="fonte">fonte.</param>
    public void copiarDe(Linha fonte)
    {
      entidade.x = fonte.x;
      entidade.y = fonte.y;

      entidade.c = fonte.c;
    }

    /// <summary>
    /// Posicao cruzada (crossPos).
    /// </summary>
    /// <param name="linha1">linha.</param>
    /// <param name="linha2">linha.</param>
    /// <param name="ponteiro2D"></param>
    /// <returns></returns>
    public bool posicaoCruzada(Linha linha1, Linha linha2, ref Ponteiro2D ponteiro2D)
    {
      double base1 = linha2.y * linha1.x - linha1.y * linha2.x;

      if (base1 == 0.0)
      {
        return false;
      }

      ponteiro2D.x = (linha2.x * linha1.c - linha1.x * linha2.c) / base1;
      ponteiro2D.y = (linha1.y * linha2.c - linha2.y * linha1.c) / base1;

      return true;
    }
  }
}
